package com.fanshe;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReflectDemo6 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class<?> c = Class.forName("com.fanshe.Student");
        // 获取所有公共方法，包括继承的
        Method[] methods = c.getMethods();

        // 获取所有方法，不包括继承的
        Method[] declaredMethods = c.getDeclaredMethods();

        // 获取单个方法
        Method function = c.getDeclaredMethod("function");

        // 获取单个公共方法
        Method method2 = c.getMethod("method2", String.class);
        // 获取无参构造函数创建对象
        Constructor<?> con = c.getConstructor();
        Object obj = con.newInstance();
        // 如何调用方法？
        // Object invoke(Object obj, Object ..., args) 在具有指定参数的指定对象上调用此方法对象表示的基础方法
        // Object：返回值类型
        // obj：调用方法的对象
        // args：方法需要的参数
        method2.invoke(obj, "xiaobai");
    }
}
